package graphic;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;

import main.app.LibraryManager;
import net.miginfocom.swing.MigLayout;
import db.DisplayedTable;
import db.TablePopulator;

public class ManagerInterface extends JFrame {

	private Connection conn;
	private LibraryManager manager;

	private JPanel contentPane;
	private JPanel contentPanel;
	private JPanel tablePanel;
	private JPanel optionPanel;
	private JScrollPane tableContainer;
	private TablePopulator tablePop;
	
	private DisplayedTable currentTable = null;
	
	private DisplayedTable autori = null;
	private DisplayedTable libri = null;
	private DisplayedTable posizioni_fisiche = null;
	private DisplayedTable posizioni_occupate = null;
	
	final Toolkit toolkit = Toolkit.getDefaultToolkit();
	final Dimension screenSize = toolkit.getScreenSize();
	
	private void updateContentPanel(JTable table) {		
		contentPanel.removeAll();
		contentPanel.setLayout(new GridLayout());
		table.setCellSelectionEnabled(true);
		table.setGridColor(Color.black);
		table.setAutoResizeMode(table.AUTO_RESIZE_ALL_COLUMNS);
		tableContainer = new JScrollPane(table);
		contentPanel.add(tableContainer);		
		contentPanel.updateUI();
	}

	public ManagerInterface(Connection dbConn, LibraryManager manage) {
		conn = dbConn;
		manager = manage;
		tablePop = new TablePopulator(conn, manager);
		setBackground(Color.DARK_GRAY);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(800, 600);
		setMinimumSize(new Dimension(640, 480));
		setPreferredSize(new Dimension(800, 600));
		setTitle("Library Manager");
		setLocation((int) (screenSize.getWidth() - this.getWidth()) / 2,(int) (screenSize.getHeight() - this.getHeight()) / 2);
		
		contentPane = new JPanel();
		contentPane.setBackground(Color.GRAY);
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new MigLayout("", "[150px] [grow]", "[30px][grow]"));
		setContentPane(contentPane);
		
		tablePanel = new JPanel();
		contentPane.add(tablePanel, "cell 0 1,growy");
		tablePanel.setLayout(new MigLayout());
		
		contentPanel = new JPanel();
		contentPane.add(contentPanel, "cell 1 1,grow");

		optionPanel = new JPanel();
		contentPane.add(optionPanel, "cell 0 0 2 1,growx");
		contentPanel.setLayout(new MigLayout("","",""));
		
		JButton btnAutore = new JButton("Autore");
		btnAutore.addActionListener(new ActionListener() {			
			@Override
			public void actionPerformed(ActionEvent e) {
				if (manager.getJTable("autore") == null) tablePop.PopulateTable("autore");
				if (autori == null) autori = new DisplayedTable(manager.getJTable("autore"));
				currentTable = autori;
				updateContentPanel(manager.getJTable("autore"));
			}
		});
		tablePanel.add(btnAutore, "wrap, growx, gaptop 20");
		
		JButton btnLibro = new JButton("Libro");
		btnLibro.addActionListener(new ActionListener() {			
			@Override
			public void actionPerformed(ActionEvent e) {
				if (manager.getJTable("libro") == null) tablePop.PopulateTable("libro");
				if (libri == null) libri = new DisplayedTable(manager.getJTable("libro"));
				currentTable = libri;
				updateContentPanel(manager.getJTable("libro"));
			}
		});
		tablePanel.add(btnLibro, "wrap, growx, gaptop 20");
		
		JButton btnPosizioneFisica = new JButton("Posizione Fisica");
		btnPosizioneFisica.addActionListener(new ActionListener() {			
			@Override
			public void actionPerformed(ActionEvent e) {
				if (manager.getJTable("posizione_fisica") == null) tablePop.PopulateTable("posizione_fisica");
				if (posizioni_fisiche == null) posizioni_fisiche = new DisplayedTable(manager.getJTable("posizione_fisica"));
				currentTable = posizioni_fisiche;
				updateContentPanel(manager.getJTable("posizione_fisica"));
			}
		});
		tablePanel.add(btnPosizioneFisica, "wrap, growx, gaptop 20");
		
		JButton btnPosizioneOccupata = new JButton("Posizione Occupata");
		btnPosizioneOccupata.addActionListener(new ActionListener() {			
			@Override
			public void actionPerformed(ActionEvent e) {
				if (manager.getJTable("posizione_occupata") == null) tablePop.PopulateTable("posizione_occupata");
				if (posizioni_occupate == null) posizioni_occupate = new DisplayedTable(manager.getJTable("posizione_occupata"));
				currentTable = posizioni_occupate;
				updateContentPanel(manager.getJTable("posizione_occupata"));
			}
		});
		tablePanel.add(btnPosizioneOccupata, "growx, gaptop 20");
		
		
		
		JButton save = new JButton("Salva");
		optionPanel.add(save);
		
		JButton newLine = new JButton("Inserisci Record");
		optionPanel.add(newLine, "");
	}

}
